September 09, 2020
function whatIsIf(parameter) {
if (condition) {
return true
} else {
return false
}
}
중고등학교 때 배웠던 집합 시간에 해봤던 벤 다이어 그램을 떠올린다.
조건문은 맨 윗줄에서부터 시작해 참이면 해당 코드블럭이 실행되고 return 할 시 아래 코드들은 실행되지 않고 그대로 빠져나오게 된다.
이러한 어떤 공통된 것을 찾는 문제를 해결할 때는 위와 같은 생각을 떠올려야 겠다.
1월부터 12월까지 끝에 마지막 날짜가 며칠인지 공책에 적어보았다.
끝 날짜가 불규칙하게 반복되어서 달을 홀수와 짝수로 분기를 하되 논리 연산자와 비교 연산자를 사용해서 가령 홀수 달이면서 8 미만인 달은 31을 돌려주고, 나머지 홀수 달은 30을 돌려주게 하는 식으로 진행해 보았다.
두 개 수를 입력받아 아래의 2가지 조건을 모두 만족하는지 검사합니다.
내가 처음에 푼 방법은 이중 if 문이였지만 이것은 다른 사람들이 내 코드를 봤을 때 좋은 방법은 아니라 했다.
좋은 방법은 조건을 하나 하나씩 쪼개서 만약 이러이러 했을 때 이 변수는 뭐가 된다 정도만 해놨다가, 마지막에 조건을 모두 만족한다면, true 를 리턴하게 하는 등의 방식을 스스로 해결해 보았다.
매개변수 score 를 10으로 나눈 몫을 10의 자리 수 라고 정의해 놓고 시작했는데, 사실 여기에서 오류가 났다. 가령 나는 9를 얻어서 십의 자리수가 9이면 A를 주고 싶었던 거였는데 실제로는 98 나누기 10 하면 9.8 이 나오니까 의도대로 되지 않았던 거 같다.
어떻게 하면 저 뒤에 .8 을 날릴 수 있을까 찾아보다가 자바스크립트에서 숫자를 정수형으로 바꿔주는 함수가 있다는 것을 알게 되었다.
let tensDigit = parseInt(score / 10)
자바스크립트에는 내림 역할을 하는 내장함수도 있는거 같아서 그거도 쓰면 될거 같다.
각 조건식에 조건에 맞게 비교 연산자와 논리 연산자 등을 적절히 잘 사용해서 작성해야 했다.
너무 오랜만에 보는 용어라서 인터넷 검색을 먼저 해봤다.
어떤 수를 제곱을 하는 방법은 총 3가지가 있다.
let squaredSide1 = Math.pow(side1, 2)
let squaredSide2 = side2 ** 2
let squaredSide3 = side3 * side3
바로 키보드에 손부터 올려놓기보다 어떻게 해야 할까를 잘 고민해야 했다. 세가지 조건인 시, 분, 초 가 모두 변화하는 현재 문제에서 가장 “교집합 적인” 조건식을 먼저 작성했다.
벤 다이어 그램의 제일 하얀색 부분의 조건을 먼저 충족시켜 주고 그리고 그 옆의 교집합, 마지막으로는 검정색 바깥부분을 돌려주게끔 조건식을 작성해 나가는 느낌이구나 라는 것을 알았다.
그리고 문자열을 세련되게 표시하기 위해 기존처럼 문자열과 + , 그리고 변수 등을 나열하는 것이 아니라,
;`1초 뒤에 ${hour}시 ${minute}분 ${second}초 입니다.`
처럼 백틱과 $ 기호 등을 적절히 사용하는 것도 알게 되었다.
NaN 은 어떤 변수와 비교하면 안되는구나. 대신 isNaN() 이라는 함수로 true / false 를 판별한다는 것을 알게 되었다.